﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Helpers;
using System.IO;
using AGPR.Locadora.Model;
using AGPR.Locadora.Utils;

namespace AGPR.Locadora.Web.Controllers
{
    /// <summary>
    /// Controlador do Cadastro de Produtos
    /// </summary>
    public class ProdutosController : BaseController
    {
        #region Index
        public ActionResult Index()
        {
            return RedirectToAction("consultar");
        }
        #endregion

        #region Cadastrar Produto

        public ActionResult Cadastrar()
        {
            ViewBag.Title = "Cadastrar Produto";
            
            return View();
        }

        [HttpPost]
        public ActionResult Cadastrar(Produto produto)
        {
            this.salvarImagem(produto);
            produto.Cadastrar();

            return this.Index();
        }

        #endregion

        #region Alterar Produto

        public ActionResult Alterar(int id)
        {
            var item = Produto.Get(id);

            if (item  == null)
            {
                return this.Index();
            }

            ViewBag.Title = "Alterar Produto";
            ViewBag.Produto = item;

            return View();
        }

        [HttpPost]
        public ActionResult Alterar(int id, Produto produto)
        {
            this.salvarImagem(produto);
            ViewBag.Title = "Alterar Produto";
            ViewBag.Produto = produto.Alterar();

            return this.Index();
        }

        #endregion

        #region Excluir Produto

        public ActionResult Excluir(int id)
        {
            var item = Produto.Get(id);

            if (item != null)
            {
                item.Excluir();
            }

            return Redirect(Request.UrlReferrer.PathAndQuery);
        }

        #endregion

        #region salvarImagem

        /// <summary>
        /// Salva a imagem do produto
        /// </summary>
        /// <param name="produto">Produto</param>
        private void salvarImagem(Produto produto)
        {
            HttpPostedFileBase imagem = Request.Files["imagem_file"];
            string imagemPath = produto.imagem;

            if (imagemPath == null)
            {
                imagemPath = "~/Static/img/produtos/" + Criptografia.random() + Path.GetExtension(imagem.FileName);
            }
            
            if (imagem.ContentLength > 0)
            {
                // Se for alteração excluo a imagem antiga
                if(System.IO.File.Exists(imagemPath))
                {
                    System.IO.File.Delete(imagemPath);
                }

                var
                img = new WebImage(imagem.InputStream);
                img.Resize(135, 200);
                img.Save(Server.MapPath(imagemPath));

                produto.imagem = imagemPath;
            }
        }

        #endregion

        #region Visualizar Produto

        public ActionResult Visualizar(int id)
        {
            var item = Produto.Get(id);

            if (item == null)
            {
                return this.Index();
            }

            ViewBag.Title = "Visualizar";
            ViewBag.Produto = item;

            if (Request.IsAjaxRequest())
            {
                return PartialView();
            }
            else
            {
                return View();
            }            
        }

        #endregion

        #region Consultar Produtos

        public ActionResult Consultar(int p = 1)
        {
            ViewBag.Title = "Consulta de Produtos";
            ViewBag.Total = Produto.Total();
            ViewBag.Paginacao = Paginacao.init(ViewBag.Total, p);            
            ViewBag.Produtos = Produto.GetAll(ViewBag.Paginacao.Offset);
            ViewBag.TotalPagina = ViewBag.Produtos.Count;

            if (Request.IsAjaxRequest())
            {
                return PartialView();
            }
            else
            {
                return View();
            }       
        }

        #endregion
    }
}
